void conv_implicit(mykernelParamType param) {
    int M = param.k;
    int N = param.n * param.Oh * param.Ow;
    int K = param.c * param.r * param.s;
    int k, n, oh, ow, c, r, s; 
    int input_addr, weight_addr, output_addr;

    for (int i = 0; i < M; i++) {
        k = i;  // PLACEHOLDER替换为i
        for (int j = 0; j < N; j++) {
            n = j / (param.Oh * param.Ow);  // PLACEHOLDER替换为j / (param.Oh * param.Ow)
            oh = (j % (param.Oh * param.Ow)) / param.Ow;  // PLACEHOLDER替换为(j % (param.Oh * param.Ow)) / param.Ow
            ow = j % param.Ow;  // PLACEHOLDER替换为j % param.Ow
            float sum = 0.0f;

            output_addr = n * param.k * param.Oh * param.Ow + k * param.Oh * param.Ow + oh * param.Ow + ow;  // PLACEHOLDER替换为正确表达式                               

            for (int kk = 0; kk < K; kk++) { 
                c = kk / (param.r * param.s);  // PLACEHOLDER替换为kk / (param.r * param.s)
                r = (kk % (param.r * param.s)) / param.s;  // PLACEHOLDER替换为(kk % (param.r * param.s)) / param.s
                s = kk % param.s;  // PLACEHOLDER替换为kk % param.s

                int ih = oh * param.u - param.p + r;  // PLACEHOLDER替换为oh * param.u - param.p + r
                int iw = ow * param.v - param.q + s;  // PLACEHOLDER替换为ow * param.v - param.q + s

                if (ih >= 0 && ih < param.h && iw >= 0 && iw < param.w) {
                    input_addr = n * param.c * param.h * param.w + c * param.h * param.w + ih * param.w + iw;  // PLACEHOLDER替换为正确表达式
                    weight_addr = k * param.c * param.r * param.s + c * param.r * param.s + r * param.s + s;  // PLACEHOLDER替换为正确表达式

                    sum += param.pin[input_addr] * param.pweight[weight_addr];
                }
            }
            param.pout[output_addr] = sum;
        }
    }
}